package org.soderiakelvy.controller.sujeto;

import java.io.Serializable;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;


import org.primefaces.event.SelectEvent;
import org.soderiakelvy.controller.util.Constante;
import org.soderiakelvy.controller.util.SelectOneMany;
import org.soderiakelvy.model.domain.DesProdTipoCliVO;
import org.soderiakelvy.model.domain.ProductoVO;
import org.soderiakelvy.model.domain.TipoClienteVO;
import org.soderiakelvy.model.service.SujetoServicio;
import org.soderiakelvy.model.service.imp.SujetoServicioImpl;


@ManagedBean
@ViewScoped
public class TipoClienteCreate implements Serializable {
	private static final long serialVersionUID = 1L;
	private TipoClienteVO tipoCliente = new TipoClienteVO();
	private SujetoServicio servicio = new SujetoServicioImpl();
	
	private String deshabilitarGuardar = "true";
	private Boolean nombreValido = false;

	private List<DesProdTipoCliVO> productosConDescuentos = new ArrayList<DesProdTipoCliVO>();	
	
	public TipoClienteCreate() {
		System.out.println("Constructor de TipoClienteCreate");
		this.deshabilitarGuardar = "true";
		iniciarListaDeProducto();
	}
	
	private void iniciarListaDeProducto(){
		DesProdTipoCliVO descuento = new DesProdTipoCliVO();
		for(ProductoVO p: SelectOneMany.getAllProductos()){
			descuento.setProducto(p);
			descuento.setPorcentajeDescuento(0);
			productosConDescuentos.add(descuento);
			descuento = new DesProdTipoCliVO();
		}
	}
	
	public String guardarTipoCliente(TipoClienteVO tp,List<DesProdTipoCliVO> productos){
		if(servicio.insertTipoCliente(tp,productos).equals("SUCCESS")){
			return Constante.URL_TIPO_CLIENTE_LIST;
		}else{
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL,"Error al insertar un tipo de cliente. ", "para continuar "));
			return null;
		}
	}
	
	public String cancelar(){
		return Constante.URL_TIPO_CLIENTE_LIST;
	}
	
	//-------------------VALIDACION-----------------------------------------
	public void listenerNombre(){
		if (this.tipoCliente.getNombre().isEmpty()||this.tipoCliente.getNombre() ==null){
			this.deshabilitarGuardar = "true";
			this.nombreValido = false;
			FacesContext.getCurrentInstance().addMessage("form1::errorNombre", 
					new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Nombre del Tipo de Cliente no puede ser Vacio", "para continuar "));
		}else{
			
			if (servicio.existeNombreTipoCliente(this.tipoCliente.getNombre().toUpperCase())){
				FacesContext.getCurrentInstance().addMessage("form1::errorNombre", 
						new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Nombre de Cliente  Existe", "para continuar "));
				this.deshabilitarGuardar = "true";  
				this.nombreValido = false;
			}else{ 
				this.nombreValido = true;
				this.deshabilitarGuardar = "false"; //HABILITO GUARDAR
			}
		}
	}
	
	// --- GET AND SET
	public TipoClienteVO getTipoCliente() {
		return tipoCliente;
	}

	public String getDeshabilitarGuardar() {
		return deshabilitarGuardar;
	}

	public void setDeshabilitarGuardar(String desHabilitarGuardar) {
		this.deshabilitarGuardar = desHabilitarGuardar;
	}

	public List<DesProdTipoCliVO> getProductosConDescuentos() {
		return productosConDescuentos;
	}

	
}
